use clap::{Parser, Subcommand};
use std::path::PathBuf;

#[derive(Parser, Debug)]
#[clap(name = "pngme", version = "1.0", author = "master")]
pub struct Cli {
    #[clap(subcommand)]
    pub command: Commands,
}

/// 四个子命令：encode、decode、remove、print
#[derive(Subcommand, Debug)]
pub enum Commands {
    /// 将一个消息编码进 PNG 文件里的指定 chunk
    Encode {
        /// 输入 PNG 文件路径
        #[clap(value_parser)]
        input: PathBuf,

        #[clap(value_parser)]
        chunk_type: String,

        /// 要隐藏的消息
        #[clap(value_parser)]
        message: String,

        /// 可选：输出文件路径。如果不提供，就覆盖原文件
        #[clap(short, long, value_parser)]
        output: Option<PathBuf>,
    },

    /// 从指定 PNG 文件的指定 chunk 里解码出消息并打印
    Decode {
        /// 输入 PNG 文件路径
        #[clap(value_parser)]
        input: PathBuf,

        /// chunk 类型
        #[clap(value_parser)]
        chunk_type: String,
    },

    /// 从指定 PNG 中删除某个 chunk
    Remove {
        /// 输入 PNG 文件路径
        #[clap(value_parser)]
        input: PathBuf,

        /// chunk 类型
        #[clap(value_parser)]
        chunk_type: String,
    },

    /// 打印出 PNG 文件里所有 chunk 的信息（或只是 chunk type 列表）
    Print {
        /// 输入 PNG 文件路径
        #[clap(value_parser)]
        input: PathBuf,
    },
}
